package fr.chrysalis.ui.components.display
{
	import flash.display.MovieClip;
	import flash.text.AntiAliasType;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
	
	import fr.chrysalis.ui.assets.IAsset;
	import fr.chrysalis.ui.components.core.Component;
	import fr.chrysalis.ui.components.core.Style;
	import fr.chrysalis.ui.components.interfaces.IComponent;
	import fr.chrysalis.ui.utils.Animation;
	
	public class Text extends Component implements IComponent
	{
		
		/**
		 * Contient le format actuel du textField 
		 */
		public var format:TextFormat;
		
		/**
		 * Instance du textfield contenant le texte 
		 */
		private var textField:TextField;
		
		private var _text:String;
		/**
		 * Récupère le texte affiché dans le label 
		 */
		public function get text():String
		{
			return _text;
		}
		/**
		 * Modifie le texte affiché dans le label 
		 * @param value Valeur du texte
		 */
		public function set text(value:String):void
		{
			this.element.txt.text = value;
			this.update();
		}
		
		private var _multiline:Boolean;
		/**
		 * Le texte est t'il multi ligne ?J
		 */
		public function get multiline():Boolean
		{
			return _multiline;
		}
		/**
		 * Active le multi ligne ou pas
		 * @param value 
		 */
		public function set multiline(value:Boolean):void
		{
			this.getTextField().multiline = value;
			this.getTextField().wordWrap = value;
		}
		
		/**
		 * Crée un Text
		 */
		public function Text(asset:IAsset)
		{
			
			super(asset);
			
			this.format = new TextFormat();
			this.format.font = "Arial";
			this.format.align = TextFormatAlign.LEFT;
			this.format.size = 12;
			
			this.textField = new TextField();
			this.textField.name = 'txt';
			this.textField.autoSize = TextFieldAutoSize.LEFT;
			this.textField.embedFonts = true;
			this.textField.selectable = false;
			this.textField.multiline = true;
			this.textField.wordWrap = true;
			this.textField.antiAliasType = AntiAliasType.ADVANCED;
			this.textField.defaultTextFormat = this.format;
			
			this.element.addChild(textField);
			this.element.txt = textField;
			
			this.enable();
			
		}
		
		/**
		 * Modifie la couleur 
		 * @param value Couleur
		 */
		public function set color(value:uint):void
		{
			this.format.color = value;
			this.updateFormat();
		}
		
		/**
		 * Applique le format 
		 */
		public function updateFormat():void{
			this.textField.setTextFormat(this.format);
			this.textField.defaultTextFormat = this.format;
			this.update();
		}
		
		/**
		 * Applique un style au texte
		 * @param value Style
		 */
		public function setStyle(style:Style):void
		{
			this.format = style.format;
			this.updateFormat();
		}
		
		/**
		 * Récupération du TextField 
		 */
		public function getTextField():TextField {
			return this.element.txt;	
		}
		
	}
}